#!/bin/bash
echo "脚本执行过程中需要输入sudo密码"
echo "推荐本地机使用优麒麟系统。如果需要构建openKylin系统，需要在本地机中安装openKylin版本的debootstrap和openkylin-keyring"
echo "请输入您想构建的系统类型、适用硬件代表的序号，如果输入错误可以按ctrl+c之后重新执行该脚本"
read -p "请输入你想构建的系统类型：1.优麒麟，2.openKylin  :" img_type
if [ $img_type == 1 ]
	then
	echo "您想构建的系统类型是：优麒麟"
	img_type_name="ubuntukylin"
elif [ $img_type == 2 ]
	then
	echo "您想构建的系统类型是：openKylin"
	img_type_name="openKylin"
else
	echo "系统类型输入错误，请重新执行该脚本"
	exit
fi
read -p "请输入你想适用的硬件：1.hifive-unmatched，2.visionfive1  :" img_hardware
if [ $img_hardware == 1 ]
	then
	echo "您想适用的硬件是：hifive-unmatched"
	img_hardware_name="hifive-unmatched"
elif [ $img_hardware == 2 ]
	then
	echo "您想适用的硬件是：visionfive1"
	img_hardware_name="visionfive1"
else
	echo "适用硬件输入错误，请重新执行该脚本"
	exit
fi
touch log1-img_type_name
echo $img_type_name > log1-img_type_name
touch log2-img_hardware_name
echo $img_hardware_name > log2-img_hardware_name
img_name=$img_type_name-$img_hardware_name.img
echo "镜像文件名为：$img_name"
# 创建空镜像文件
dd if=/dev/zero of=$img_name bs=1M count=8192
# 对镜像文件进行分区
sudo sgdisk -g --clear --set-alignment=1 \
        --new=1:34:+1M:    --change-name=1:'u-boot-spl'    --typecode=1:5b193300-fc78-40cd-8002-e86c45580b47 \
        --new=2:2082:+6M:  --change-name=2:'opensbi-uboot' --typecode=2:2e54b353-1271-4842-806f-e436d6af6985 \
        --new=3:16384:+500M:   --change-name=3:'boot'      --typecode=3:0x0700  --attributes=3:set:2  \
        --new=4:0:-0   --change-name=4:'rootfs'       --typecode=4:0x8300 \
        $img_name
# 将镜像文件挂在为循环设备
logsave log3-loopnum bash -c "sudo losetup --partscan --find --show $img_name"
loop_num=$(head -n 4 log3-loopnum  | tail -n 1)
p3='p3'
p4='p4'
loop_nump3=$loop_num$p3
loop_nump4=$loop_num$p4
p1='p1'
p2='p2'
loop_nump1=$loop_num$p1
loop_nump2=$loop_num$p2
echo $loop_nump3
echo $loop_nump4
# 格式化镜像并设置镜像分区格式
sudo mkfs.vfat $loop_nump3
sudo mkfs.ext4 $loop_nump4
sudo dosfslabel $loop_nump3 boot 
sudo e2label $loop_nump4 rootfs
# 挂载循环设备的p4分区到/mnt/目录
sudo mount $loop_nump4 /mnt
# debootstrap在镜像中下载根文件系统
sudo apt-get install debootstrap qemu-user-static binfmt-support
if [ $img_type == 1 ]
	then
	sudo debootstrap --arch=riscv64 focal /mnt http://ports.ubuntu.com/ubuntu-ports
elif [ $img_type == 2 ]
	then
	echo "如果报错，需要在本地机中安装openKylin版本的debootstrap和openkylin-keyring，并重新执行脚本"
	sudo debootstrap --arch=riscv64 --keyring=/usr/share/keyrings/openkylin-archive-keyring.gpg yangtze /mnt http://archive.build.openkylin.top/openkylin/
else
	echo "系统类型输入错误，请重新执行该脚本"
	exit
fi
# 挂载循环设备的p3分区到/mnt/boot/目录
sudo mount $loop_nump3 /mnt/boot/
sudo cp autoBuildImgStep2.sh log1-img_type_name log2-img_hardware_name /mnt/home/
echo "第二段脚本autoBuildImgStep2.sh在chroot后的/home/目录中"
#chroot进入镜像进行后续操作
sudo chroot /mnt/
